{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[NbConvertApp] Converting notebook seqInit.ipynb to python\n",
      "[NbConvertApp] Writing 1404 bytes to seqInit.py\n"
     ]
    }
   ],
   "source": [
    "!jupyter nbconvert --to python seqInit.ipynb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "### FC模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc39c33b1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataSet shape :\t (144, 1)\n",
      "train data shape : (120, 1)\n",
      "real data shape : (24, 1)\n"
     ]
    }
   ],
   "source": [
    "# 引入torch相关模块\n",
    "import torch\n",
    "from torch import nn, optim\n",
    "from torch.autograd import Variable\n",
    "from torch.nn import init\n",
    "\n",
    "# 引入初始化文件中的相关内容\n",
    "from seqInit import toTs, cudAvl\n",
    "from seqInit import input_size\n",
    "from seqInit import train, real\n",
    "\n",
    "# 引入画图工具\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义FC模型\n",
    "\n",
    "class fcModel(nn.Module) :\n",
    "    def __init__(self, in_dim, hidden_dim, out_dim) :\n",
    "        super().__init__()\n",
    "        ly, self.linear = 1, nn.Sequential()\n",
    "        for hid in hidden_dim :\n",
    "            layer = nn.Sequential(nn.Linear(in_dim, hid), nn.ReLU(True))\n",
    "            self.linear.add_module('layer_{}'.format(ly), layer)\n",
    "            ly, in_dim = ly + 1, hid\n",
    "        self.linear.add_module('layer_{}'.format(ly), nn.Linear(in_dim, out_dim))\n",
    "        \n",
    "        # 使用kaiming_normal初始化模型参数\n",
    "        self.weightInit(init.kaiming_normal)\n",
    "    \n",
    "    def forward(self, x) :\n",
    "        x = self.linear(x)\n",
    "        return x\n",
    "    \n",
    "    def weightInit(self, func) :\n",
    "        for name, param in self.named_parameters() :\n",
    "            if 'weight' in name : func(param)\n",
    "\n",
    "# 输入为input_size，输出为1，隐藏层设定为3层，分别有[20, 10, 5]的维度\n",
    "hidden = [20, 10, 5]\n",
    "fc = cudAvl(fcModel(input_size, hidden, 1))\n",
    "\n",
    "# 定义损失函数和优化函数\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(fc.parameters(), lr = 1e-2)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(117, 3, 1) (117, 1)\n",
      "(21, 3, 1) (21, 1)\n"
     ]
    }
   ],
   "source": [
    "# 制造数据集函数\n",
    "def create_dataset(dataset, look_back) :\n",
    "    dataX, dataY = [], []\n",
    "    for i in range(look_back, len(dataset)) :\n",
    "        x = dataset[i - look_back: i]\n",
    "        y = dataset[i]\n",
    "        dataX.append(x)\n",
    "        dataY.append(y)\n",
    "    return np.array(dataX), np.array(dataY)\n",
    "# 制造训练集\n",
    "trainX, trainY = create_dataset(train, input_size)\n",
    "print(trainX.shape, trainY.shape)\n",
    "\n",
    "# 制造测试集\n",
    "testX, realY = create_dataset(real, input_size)\n",
    "print(testX.shape, realY.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([117, 3]) torch.Size([117, 1])\n"
     ]
    }
   ],
   "source": [
    "# 处理输入\n",
    "fcx = trainX.reshape(-1, 3)\n",
    "fcx = torch.from_numpy(fcx)\n",
    "fcy = trainY.reshape(-1, 1)\n",
    "fcy = torch.from_numpy(fcy)\n",
    "print(fcx.shape, fcy.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch[1/10], Loss: 0.03160\n",
      "Epoch[2/10], Loss: 0.01490\n",
      "Epoch[3/10], Loss: 0.00586\n",
      "Epoch[4/10], Loss: 0.00436\n",
      "Epoch[5/10], Loss: 0.00307\n",
      "Epoch[6/10], Loss: 0.00291\n",
      "Epoch[7/10], Loss: 0.00279\n",
      "Epoch[8/10], Loss: 0.00269\n",
      "Epoch[9/10], Loss: 0.00265\n",
      "Epoch[10/10], Loss: 0.00261\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc335087080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 125 ms, sys: 98.8 ms, total: 224 ms\n",
      "Wall time: 116 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# 训练FC模型\n",
    "frq, sec = 100, 10\n",
    "loss_set = []\n",
    "for e in range(1, frq + 1) :\n",
    "    inputs = cudAvl(Variable(fcx))\n",
    "    target = cudAvl(Variable(fcy))\n",
    "    # forward\n",
    "    outputs = fc(inputs)\n",
    "    loss = criterion(outputs, target)\n",
    "    # reset gradients\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    # print training infomation\n",
    "    print_loss = loss.data[0]\n",
    "    current = e // sec\n",
    "    loss_set.append((e, print_loss))\n",
    "    if e % sec == 0 :\n",
    "        print_info = 'Epoch[{}/{}], Loss: {:.5f}'.format(current, frq // sec, print_loss)\n",
    "        print(print_info)\n",
    "\n",
    "# 作出损失函数变化图像\n",
    "pltX = np.array([loss[0] for loss in loss_set])\n",
    "pltY = np.array([loss[1] for loss in loss_set])\n",
    "plt.title('loss function output curve')\n",
    "plt.plot(pltX, pltY)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(21, 3) (21, 1)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fc330dfaeb8>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJztnXd4VFXzx7+H0It0pXekJYAQmiSgIlVAuqBioQr6Q3xFBVFUXrChoCiCVBEQfCUEiaBgAop0Qu9VSgCRGmogZX5/zG7YJLvZ3dxzdze783mefXZz79m5k7v3zj1nzpwZRUQQBEEQ/Isc3lZAEARB0I8Yd0EQBD9EjLsgCIIfIsZdEATBDxHjLgiC4IeIcRcEQfBDxLgLgiD4IWLcBUEQ/BAx7oIgCH5ITm8duESJElSpUiVvHV4QBCFbsm3btotEVNJZO68Z90qVKiE2NtZbhxcEQciWKKVOutJO3DKCIAh+iBh3QRAEP0SMuyAIgh/iNZ+7PRITExEXF4eEhARvq+I35M2bF+XKlUOuXLm8rYogCB7Ep4x7XFwcChUqhEqVKkEp5W11sj1EhEuXLiEuLg6VK1f2tjqCIHgQp24ZpdRspdS/Sqm9DvYrpdRkpdRRpdRupVSDrCqTkJCA4sWLi2HXhFIKxYsXl5GQIAQgrvjcvwPQLpP97QFUt7wGAZhqRCEx7HqR8ykIgYlT405EawFczqTJkwC+J2YTgCJKqdK6FBQEwXdJSQHmzAHOnvW2JkJ6dETLlAVw2ubvOMu2DCilBimlYpVSsRcuXNBwaN+nYMGCAICzZ8+iR48embb94osvcOvWrdS/O3TogKtXr5qqnyAYYdUqoF8/ICQEiIjwtjaCLR4NhSSi6UQUSkShJUs6XT3rsyQnJ7v9nTJlymDx4sWZtklv3FesWIEiRYq4fSxB8BTR0UDu3EDlykCPHsDzzwPx8d7WSgD0GPczAMrb/F3Osi1bcuLECdSsWRPPPPMMatWqhR49euDWrVuoVKkS3nrrLTRo0AA//fQTjh07hnbt2qFhw4YIDw/HwYMHAQB///03mjVrhpCQELzzzjtp5AYHBwPgh8OIESMQHByMunXr4quvvsLkyZNx9uxZPProo3j00UcBcIqGixcvAgAmTpyI4OBgBAcH44svvkiVWatWLQwcOBB16tRBmzZtcPv2bU+eLiHAiYkBmjcHNm4E3n0XmD8fqFcPWLvW25oJOkIhlwF4RSm1CEATAPFEdM6w1OHDgZ07DYtJQ/36gMUwZsahQ4cwa9YsNG/eHP369cM333wDAChevDi2b98OAGjVqhWmTZuG6tWrY/PmzRg6dChWr16NV199FUOGDMFzzz2HKVOm2JU/ffp0nDhxAjt37kTOnDlx+fJlFCtWDBMnTsSaNWtQokSJNO23bduGOXPmYPPmzSAiNGnSBC1btkTRokVx5MgRLFy4EDNmzECvXr0QERGBZ5991uCJEgTnXLjAt+i4cUCuXMDYsUD79kDfvsAjjwBvvMHb8uTxtqaBiSuhkAsBbARQQykVp5Tqr5R6SSn1kqXJCgDHARwFMAPAUNO09RDly5dH8+bNAQDPPvss1q1bBwB46qmnAAA3btzAhg0b0LNnT9SvXx+DBw/GuXP8PFu/fj369OkDAOjbt69d+dHR0Rg8eDBy5uRna7FixTLVZ926dejatSsKFCiAggULolu3bvjrr78AAJUrV0b9+vUBAA0bNsSJEycM/OeC4Dpr1vD744/f29asGRv8AQOATz8FmjQB9u3zjn6BjtOeOxH1cbKfALysTSMrLvSwzSJ9+KD17wIFCgAAUlJSUKRIEex0MLLwZPhhHptuUVBQkLhlBI8REwPcdx/QsGHa7QULAtOnA506sZFv2BD4+GNg2DAghyQ88Rhyqu1w6tQpbNy4EQDwww8/ICwsLM3+++67D5UrV8ZPP/0EgFeC7tq1CwDQvHlzLFq0CACwYMECu/Jbt26Nb7/9FklJSQCAy5c50rRQoUK4fv16hvbh4eFYunQpbt26hZs3byIyMhLh4eEa/lNByDrR0ex+yemgi9ipE7BnD9C2LfDaa0CbNkBcnEdVDGjEuNuhRo0amDJlCmrVqoUrV65gyJAhGdosWLAAs2bNQr169VCnTh38/PPPAIAvv/wSU6ZMQUhICM6csT+vPGDAAFSoUAF169ZFvXr18MMPPwAABg0ahHbt2qVOqFpp0KABXnjhBTRu3BhNmjTBgAED8NBDD2n+rwXBdf7+Gzh+PK1Lxh733w8sXQrMmAFs2sQhkwsXekbHQEexV8XzhIaGUvpiHQcOHECtWrW8oo+VEydOoGPHjti71262hWyJL5xXwb+YORMYOJD96bVru/adY8d4snXjRqBPH2DKFKBoUXP19EeUUtuIKNRZO+m5C4LgNjExQOnSgDt9hqpVOURy3Djgp5+AunVZjmAOYtzTUalSJb/qtQuCblJS2Ci3agW4GzuQMycwejT33gsUYLeOxSspaEaMuyAIbrF3L8e4O/O3Z0ZoKLB9O/fmxbibgxh3QRDcIjqa31u1MiYnf37gsceA9et5NCDoRYy7IAhuERMD1KgBlCtnXFZYGHD1KrB/v3FZQlrEuAuC4DJ37wJ//mm8124l7NhcAIBlEbigETHumnnhhRecZn8UhOzKli3AzZvG/O2p/PMPKo99AaVzXcC6dd4JyfZnxLhnAhEhRZyBgpBKdDSnEHjkEQ3CYmKgADRP/AProqUUpG7EuKfjxIkTqFGjBp577jkEBwdj3rx5aNasGRo0aICePXvixo0bAICxY8eiUaNGCA4OxqBBg+CtxWCC4EliYjhXjJbFRzExQNGiCCu8FyfP58Pp086/IriOjpS/puDFjL84cuQI5s6di2rVqqFbt26Ijo5GgQIF8Mknn2DixIkYM2YMXnnlFYwZMwYAZ3/85Zdf0KlTJ70KC4IPceMGpxAYMUKDMCIeBjz2GMIq1gAmAutnH0Lv92poEC4A0nO3S8WKFdG0aVNs2rQJ+/fvR/PmzVG/fn3MnTsXJ0+eBACsWbMGTZo0QUhICFavXo19ktdU8HPWrgWSkjT5248eBU6fBh5/HPXGPIkCuIl1cw5rECxY8dmeuxcz/qam9iUitG7dGgvTZTpKSEjA0KFDERsbi/Lly+P9999HQoL4DAX/JjqaC288/LAmYQDQqhVyFi6AZlWPY/2xcsCOHYAkxdOC9NwzoWnTpli/fj2OHj0KALh58yYOHz6cashLlCiBGzduSHSMEBDExHBcer58moRVqABUqwYACOtZGrtRF/EfeLFX52eIcc+EkiVL4rvvvkOfPn1Qt25dNGvWDAcPHkSRIkUwcOBABAcHo23btmjUqJG3VRUEU/n3X2D3bk3x7cnJwOrVaZLThD2eDykIwqafzwOWesSCMSTlbwAg51UwyqJFnKZ3yxbAcF9m2zZOLrNgAfD00wB4srZIEcIo9Qn++8xB4LvvDOvsr0jKX0EQtBEdDRQpAjRooEkYwIllLBQsCDz0kMK6Ut2B+fMBqQVsGDHugiBkijVq8ZFHgKAgDQJjYoA6dYBSpdJsDgsDNl+sirsqDzBhgoYDBTY+Z9xlMZBe5HwKRjl+HDh5UlMIZEICJ5KxIywsDLidkAM7OowGZs0Czp3TcMDAxaeMe968eXHp0iUxSJogIly6dAl58+b1tipCNsZaLUnLZOrGjcDt23aFNW/O7+tqDwISE4FJkzQcMHDxqTj3cuXKIS4uDhcuXPC2Kn5D3rx5UU5HblYhYImOBsqW5TS/homJYd9Oy5YZdpUqxcU71h0sgdefegqYOhUYORIoVkzDgQMPnzLuuXLlQuXKlb2thiAIFlJSOGrxiSfcL6lnl+hooHFj4L777O4OCwOWLwdo9dtQCxcCkycD77+v4cCBh0+5ZQRB8C127wYuXdLkb4+PB7ZuzVRYWBhw8SJwOHcw8OSTbNyvX9dw8MDDJeOulGqnlDqklDqqlBppZ39FpVSMUmq3UuoPpZT4AQTBD9BVUg8A8McfPBTIRFhYGL+vWwfg7beBK1eAadM0HDzwcGrclVJBAKYAaA+gNoA+Sqna6Zp9BuB7IqoLYCyAj3QrKgiC54mJAWrVAsqU0SQsf36gaVOHTWrUAIoX57qqaNyYe/mff86TsIJbuNJzbwzgKBEdJ6K7ABYBeDJdm9oAVls+r7GzXxCEbMbdu5wJUldJPURHA+HhnH3MAUpx7z217N7o0cD588CcOZqUCBxcMe5lAdim0Y+zbLNlF4Buls9dARRSShU3rp4gCN5i0ybg1i1N/vazZ4EDB1wSFhYGHDnCNh0tWwLNmgGffsrhkYLL6JpQHQGgpVJqB4CWAM4ASE7fSCk1SCkVq5SKlXBHQfBtrCX17EQtuo8bwfJWv/v69eCu/OjRvIpqwQINigQOrhj3MwDK2/xdzrItFSI6S0TdiOghAKMt266mF0RE04kolIhCS5YsaUBtQRDMJiaGk4QVKaJJWPHiQL16Tps2aADkzWvjmunQgb/38cecUVJwCVeM+1YA1ZVSlZVSuQH0BrDMtoFSqoRSyiprFIDZetUUBMGTXLsGbN6syd9uU1IPOZybnNy5gSZNbIy7Uhw5c+gQsGSJBoUCA6dnmoiSALwCYCWAAwD+R0T7lFJjlVKdLc0eAXBIKXUYwAMAxpukryAIHmDtWu4ka/G3Hz4MnDnj1pMiLAzYvh24edOyoXt34MEHgfHj+WEhOMUlnzsRrSCiB4moKhGNt2wbQ0TLLJ8XE1F1S5sBRHTHTKUFQTCX6Gh2jTRrpkGY1d/uxpMiLIwfLps3WzYEBXEqgl27gF9/1aCU/yMrVAVByEBMDEctask5Fx0NVKwIVKni8leaNWNvTKprBgCefZZL80nv3SXEuPs48fHAJ5/wXJIgeIJ//gH27tVYUm/NGu61u5GcpnBhICQknXHPlQt4801gwwb2GwmZIsbdR7l4EXjnHe7wjBzJ0WDx8d7WSggEVluWI2rxt2/fDly9mqUnRVgYZwhOSrLZ2K8f8MAD3HsXMkWMu49x5gzwn/+wUf/wQ77BJk3ilBwbNnhbOyEQiI4GihYF6tfXIMzqb7cpqecqYWFcW3X3bpuN+fLxDfL775yETHCIGHcf4fhxYPBgdktOnszBAfv2AYsXAwMHAjlzAn/95W0tBX/HNmpRS0m96Gj2rzzwgNtfTbOYyZYhQzj4/sMPjevnx4hx9zL79wN9+3KU13ff8ajz8GHg++85YRMAFCgANGwoxl0wn6NHgdOnNfnbb99mp3kWhZUvz/OnafzuAFCoEDBsGLB0KU8OCHYR4+4ltm3j3nmdOrwu49VXgb//5uIz9oIKwsOBLVu4BKUgmIXWknobNgB37hhy3luTiGUIjhk2jHs9UkjbIWLcPcxffwHt2gGhoTxx9e67nDbj888zT6saHs5Z+sTNKJhJdDT3mKtX1yAsJob9iS1aZFlEWBjnHDtxIt2O4sW5PJQMZx0ixt1DbNnCBrpFCw4g+OgjNupjxwIlSjj/vrV4sFzLgllYoxZbtdJYUq9JE3ajZJE0xTvSExLCw12p1GQXMe4egAjo2ZP9mV9+yb2QkSMdlpG0S/Hi7MKR8F7BLHbuBC5f1hQCefUq+x4N+nfq1OGYd4fGHeCJKyEDYtw9wK5dwKlTHJo7bBgXo8kK4eHsxpTEeIIZGIhazIi1pJ7BJ0WOHDxqtWvcg4P5XSZV7SLG3QNERfEw94knjMlp0YJHoLt26dFLEGyJjuaecunSmoTlz89uGYOEhXHn/NKldDsqV+Zj7Nlj+Bj+iBh3D7BsGV/jWQj1TUN4OL+L313QzZ07hqIWMxITw1U+cuc2LMo635RhEV+OHPw0kp67XcS4m8zZs0BsLNCpk3FZ5coBlSqJcRf0s3Ejh6Vr8befOQMcPKjtSdGoEaeVceiakZ67XcS4m8zy5fyuw7gD3Hv/6y9JiifoJTqaV6R6uqSeK+TLx6HDDidV//2XX0IaxLibTFQU97atcz9ZYulS4JlngD17EB7O1/Hhw7o0FAS2x40buxfB5ZDoaI7vrVtXgzAmLIxHwBkW8VlvrH37tB3LXxDjbiK3bnF+o06dDMYNjx8P/PADUK8ewleMAiCuGUEf8fG8DkNbSb2YGJdL6rlKWBgv4ouNTbfDGg4prpkMiHE3kZgY7mkYcsmcPs1X9JtvAq+/jhorJqEk/sVfX2zjWGJBMIimqEXm4EGeaNIi7B4PP8zvGVwzDzzAi0BkUjUDYtxNJCqKF+cZ8mMuXcrvL74ITJgAdfgQwiucxF/7inISms8/l4QzgiF+/BEoVkxzST1tYTdMiRKcSC+DcVdKJlUdIMbdJFJS2Li3a2cwGmzpUqBmTX4BQMWKCH+tEf5GFcTV7QCMGMH75s/ngwqCG1y/zpfYU09piVpkf3vlym6V1HOVsDBO/5vhMg8J4Z67RBmkQYy7SWzbxuXKDLlkLl0C/vwT6No1zebUePfB8/lmKl6c8wY3bMhOfkFwkYgIDoHs21eDsKQk9vFo7rVbCQtjT2SGbAPBwVzV4+RJU46bXRHjbhJRUTyf1KGDASG//MK5BtIZ93r1gIIFLZOqrVpxqsgFC/jKb9OGXzt2GNJfCAzmzQOqVQOaNtUgbPt2np3V7G+34jCJmHVSVfzuaRDjbhJRUTwJVLy4ASGRkUDZstwjtyFnTpadGjGTIwfw9NM8mTVpEg8bGjTgavEZcqUKAnP6NGeB7NtXYxZIQFNymoxUrsypETIY9zp1+F2MexrEuJvAqVOcYa9zZwNCbt0CVq0CunSxG1LWogVfy5cv22zMkwcYPhw4dozTTkZEADVqAG+/Lf5IIQMLFvBl8eyzmgTGxHBse8mSmgSmRSkHScQKF+Yk9DKpmgYx7ibwyy/8bsjfvnIlO0PTuWSsWP3uGepLAlxf8qOPgCNHgCef5M+SbUywgYhdMs2ba5r7vH2bL0aTXDJWwsLYtX76dLod1klVIRWXjLtSqp1S6pBS6qhSaqSd/RWUUmuUUjuUUruVUkY8zdmeqCj2Y9aoYUBIZCSXoHdQxaZxY45uyHQxU7lywAcf8Gfp1Qg27Nhxr36vFtav5+xjJk2mWnFYNDs4GDhwAEhMNPX42Qmnxl0pFQRgCoD2AGoD6KOUqp2u2TsA/kdEDwHoDeAb3YpmF27c4PJ5hlalJiZy979jR86YZIe8eTmhktPiHdWr81NAjLtgw7x5fFn06qVJYHS04ZJ6rlCvHpdOtTupmpjIo1UBgGs998YAjhLRcSK6C2ARgCfTtSEA1qwUhQGc1adi9mLVKl4mbcjfvnYtcOWKQ5eMlfBwnju9eTOTRjlz8uoPMe6ChaQkzmbRqRMPDrUQE8MhNwULahJon5w5ebGV3Z47INe5Da4Y97IAbD1ccZZttrwP4FmlVByAFQD+T4t22ZCoKHZ5W3NQZ4nISO6at2mTabPwcL5RN292Ik/8kYINq1Zx8jltLpnLl7mXYbK/3UpYGLB7N0ddplKzJqe1lOs8FV0Tqn0AfEdE5QB0ADBPKZVBtlJqkFIqVikVe+HCBU2H9h2SkznFb/v2Dr0pziHiJYNt2/L4MxOaN2fXj9MkYiEhQFwcjwaEgGfePA7Rbd9ek8A//uDr1mR/u5WwMF6lummTzca8edkFKcY9FVeM+xkA5W3+LmfZZkt/AP8DACLaCCAvgBLpBRHRdCIKJaLQkiaFS3mTLVuACxcMRsnExnKxAycuGYAjwOrVc9G4A3LhC7h2TXO6AYD97QULaimp5wpNmnAnPYPfXXLMpMEV474VQHWlVGWlVG7whOmydG1OAWgFAEqpWmDj7n9dcycsW8Y+wXbtDAiJjOQrt2NHl5qHh3MVnUyDBMQfKViIiOA8c9pcMgD721u0MDBcdY+CBYGHHnIwqXr8uJNJqMDBqXEnoiQArwBYCeAAOCpmn1JqrFLKOm34OoCBSqldABYCeIEo8FbNREWxsTU0SbV0Kd8oLi5tDQ/n9U7bt2fSqFw57uZLzz3gmTePvRfaOtknT3LlGA+5ZKyEhfFc0927NhuDg9k9lCH5TGDiks+diFYQ0YNEVJWIxlu2jSGiZZbP+4moORHVI6L6RLTKTKV9kePHuRiMIZfMoUMcq+uCS8aKS0WzleJejfTcA5pTpzSnGwA4GynAi+U8SFgYr5tKk0JJ3I9pkBWqmoiK4ndDxj0ykt+7dHH5K6VKcU/MJb/7nj2ShiCAWbCA37WlG0hJAWbPBh55BKhaVZNQ17BGo6VxzVSpwhOrYtwBiHHXRlQUh5NXq2ZASGQkJwkrX955WxvCw/kizzSde3Awx47FxRlQUMiuWNMNhIVxAi4trF3LQ9b+/TUJdJ1Spfh5smaNzcagIKB2bRmhWhDjroH4eE67bqjXfuYMh9u44ZKxEh7OocYHDmTSSIasAc327Xx9aJ1InTWL53K6d9co1HV69ABWrGBvZiqypiMVMe4aWLmSFxMZMu4//8zvWTTugJNUBBIxE9BY0w307KlJYHw8sHgx0KcPkC+fJqHu8Z//sBfmww9tNgYHA+fOcaGbAEeMuwaWLePgFkM1KCMjgQcfZN+Om1SpwnmuM/W7Fy3KUTNi3AOOxERON9C5s8Z0AwsXckylF1wyVu6/Hxg8mOcSjh+3bJQRaipi3A2SlMRDwyeeYJdflrhyhVf5demSpTAGpbj3/tdfTuZLJWImIFm1ihfXaXfJ1K2boZCMp3njDV5b8tFHlg0yQk1FjLtBNmxg22zIJbN8OT8lsuCSsdKiBc+VZlpGUtKiBiTWdAOGFtfZsns3r6Tu319jTGXWKFOG1Zg7l0M9UaYMJ3eSnrsYd6NERfHCPCc5vjInMpL9Ko0bZ1mES/HuISG86uPo0SwfR8hexMfzdE7v3hrTDcyezcKeeUaTQGO89Ra/f/op7q3pEOMuxt0oy5ZxmO999zltap/bt4HffuNFIHbK6blKcDB3WJwad0CGrAGE9nQDd+7wUKBLF4MFgvVRoQLw/PPAzJk8l4rgYDbuAb6mQ4y7AQ4f5peh3O2//875Awy4ZAB+LjRv7iRixpoWVYx7wPD997zIzcCgMC0//8xxt16cSLXHqFHs2ZwwAdyJkTUdYtyNoG1VauHC3P03SHg4x/z++6+DBta0qGLcA4KTJ3n9xXPPaXSNz5rFXWUP55JxRpUq7CWaNg34t+xDvDHAr3Mx7gZYtow7CRUrZlFAUhI/IZ54QotD1Op3z5AtzxbxRwYM2tMNnDrFI80XXjAQGmYeb7/NLqiJq+vzhgC/zsW4Z5HLl7nUl6Fe+7p1vNjCoEvGSmgod86d+t0lLarfY003EB4OVKqkSeh33/H7iy9qEqiXGjW4JuyUWXlxqVQdMe7eViC78uuvXHnJkL89MhLIk0dbjFru3FzG0qlxJ+IUloLfsm0bcPCgxonUlBRgzhx2x2h7Wuhn9GguUv9l/lHilvG2AtmVqCjggQeARo2yKMBaTq9NG61FhcPDOQ3q9esOGsgij4Dg+++536At3cDq1cCJEz43kZqekBAeCE8+0w3x+8+w6zNAEeOeBe7e5Z77E08YiF7csYN9mG6k93WF8HDuZG3Y4KBBlSpA/vwBP2T1ZxITgUWLeFRZpIgmobNnc+4CzderGbzzDhB/Jx++ujsooNd0iHHPAn/9xbUoDUfJ5MhhUEhGmjXjuS6HrpkcOYA6daTn7sesXKk53cCVK8CSJRyOkjevJqHm0aAB8ERYPCbhNVzfetDb6ngNMe5ZICqKh7ytWxsQEhnJ3WzNhcKt9SWd+t3FuPst8+YBJUpoTDewYAEvXvJxl4wt747Lg8sojmnf5/e2Kl5DjLubEHEIZKtWQIECWRRy5AhPaJo0xG3RgutL3rnjoEFwMAfDOwyIF7IrV6/eSzegrV717NncHa5fX5NA82nSMi9a51+Hz/5qjFu3vK2NdxDj7ib79wN//23Qm7J0Kb+bZNzDw9mwx8Y6aCBpCPyWxYv5t9fmktmxg1/9+mkS6DneDf0N/94pghkzvK2JdxDj7ibWVakdOxoQEhnJvhOTQsrCwvjdYSoCyXntt8ybx2UBshzFlZ5Zs9gH+fTTmgR6jvBHgtASf+DTTwgJCd7WxvOIcXeTqCgeoZYrl0UB584BGzeaGnVQogTX/HDod3/gAfb1S8/drzhxgh/o2tIN3L7N/vbu3TVW+fAgISF4F//F2XMKc+Z4WxnPI8bdDS5cYLtsyCWzbBm/a1qV6ojwcF5Bm5zsoIFMqvod1nQD2jLxLl3KTvxs6JIBAAQH4zGsRrNq/+LjjzmEOZAQ4+4Gy5fzhKrhEMiqVe8tJjKJ8HAO13Rov4ODeVI3JcVUPQTPYE030KKFRm/frFlA5crAo49qEuhhqlWDypMH79ZdhlOn+PwEEmLc3SAqigu9NGiQRQHx8bzSr2tX0yvYtGjB7w5dMyEhnF/mxAlT9RA8w9atnBFU20Tq338DMTGcR8ZAnQGvkjMnUKsW2t2MQGgoF9IOpAWr2fRX8zw3bnAtyo4dDdjlFSt4+aAHVvlVqMCvTI07IK6ZbA4Rr5YePJjnPXv00CR4zhy+0F94QZNALxEcDLV3D955h/PlLVzobYU8h0vGXSnVTil1SCl1VCk10s7+SUqpnZbXYaXUVf2qepe5c9nAP/+8ASGRkTyZ2ayZNr0yIzycJ9jsFqSpU4ffxbhnS1JSOOyxYUOgQwdOLvrdd5rSDSQns7A2bYDy5TUI9CIhIcCZM+gUdgV16wLjx2cyD+VnODXuSqkgAFMAtAdQG0AfpVRt2zZE9BoR1Sei+gC+ArDEDGW9RUoK8OWXXM0my3Y5IYG7WAbL6blDeDhw/ryD9BoFC7I/VYx7tiIxkZOC1anDScFu3OA1RkeP8sIlLURHA6dPZ6sVqQ6xzG3l2L8Xo0ez62rxYi/r5CFcsTKNARwlouNEdBfAIgBPZtK+DwC/GvwsX86LSl97zYBLJiaG70QPJl5yWjRbCndkGxISgKlTOYb9+ec5vfOiRcCBA+wW11b8GuCJ1OLFDeaz9hFs1nR0786VJseNC4w4AleMe1kAp23+jrNsy4BSqiKAygBWO9g/SCkVq5T5UiHgAAAgAElEQVSKvXDhgru6eo1JkziuvXt3A0IiI4FChYDHHtOmlzNq1eJ7NFPjfuhQJnkKBG9z4wbw+eeczHPoUKBUKZ7Y37kTeOopEwoiXbzIIZB9+7ITP7tTrhxXr9+zB0FBnO997957Ecn+jG7/QG8Ai4nIrleLiKYTUSgRhZbUnDDLLHbuBNasAf7v/wzk6rh9m8vQd+rk0RtGKe69Z2rck5O5qoPgU1y5AowdyyUcR4wAatfmwd+GDQYn9Z2xYAH7frJrbHt6lGLXjGWE2rs3RyL/978O5qL8CFeM+xkAtrMq5Szb7NEbfuaS+fJLTn8+cKABIUuW8GIQL/gww8OBY8e4WHIGpHCHz3H+PDByJBv1994DmjfnhXPR0TzoMzWClohdMo0a3XNn+ANW9yMRcubkWqvbt/MUmD/jinHfCqC6UqqyUio32IBnGNQopWoCKApgo14Vvcc//wA//MA+TUOrr2fM4HH1I4/oUs1lunVjgzBrlp2dDz7IwxEx7j7Bxx/zAqQJE7gQzK5d7D5o2tRDCsTG8rXgDxOptgQH81Do7FkA7HGqWJF97/6MU+NOREkAXgGwEsABAP8jon1KqbFKKdsZl94AFhH5z2Bn6lQeob76qgEhhw8Df/4JDBjglcUglSoB7dsDM2fy/5KGXLnYMS+Tql5nxw7uUbZuzV6yhQuBunU9rMTs2UC+fBrDbnyEdInycuXie3rjRr49/RWXrA0RrSCiB4moKhGNt2wbQ0TLbNq8T0QZYuCzK9bohI4dgerVDQiaNYtnvby4GGTIEM5X9vPPdnZKjhmf4K23gGLFeIm8oestq9y6xcPUHj2AwoW9oICJ2HE/Whd7LfGroO20yApVByxYwInCXnvNgJDERF4M0rEjULq0LtXcpn17Xq06bZqdnSEhHNN81e/WnWUbVq0Cfv8dePddL9rViAhORuRvLhmAQ8ZKl04zQi1fntetRER4US+TEeNuByIOf6xXz6CbPCqKqx0NGKBLtSwRFAQMGsTRFhmGodZejbhmvEJyMvDmmzwlM2SIAUFJSexTjo/PWgKVWbOAatXuJSXyN2wiZqx0787TDHaDDfyAnN5WwBeJjuaEidb0Gllm5kygbFmNxSyzTv/+wPvvc+994kSbHbb+SGuVD8FjLFjAE6cLFxpciDRoENIkLc+bl1chFyzI9SCtn+29cubkeaEPPzQ9oZ3XCA5mP2tycurigG7d2B22ZInBEbqPorw1/xkaGkqxDuvAeZcOHThU6uRJA2Hpp07xbObo0RxU6wM89RQP/8+c4XkzADxMKVqUk4BPmeJV/QKNhAQOWHrgAa55m+X59tOnOZVEp05Ay5a88sn2df16xm3Wl7XAaP78vAy7TBlt/59PMWcOx+4fPpxmUqNePV7jlGlBeR9DKbWNiEKdtZOeezoOHOD41w8+MLjeaPZsfvchH+aQIcD//gf8+KPN/K51kYdMqnqcr75iuzx3rsFAqi+/5PcvvuAYP3dITmYDnyOHgYrv2QDbSVUb4969O49o//mHV//6E+JzT8eXX7JRf+klA0KSk9m4t25tWp3UrNCyJUc+Tp2abofVuPtPFKvPc+kSZyh84gmDtTDi44Hp03lY5q5hB9hFUaiQfxt2gJf4KmXX707E2UH8DTHuNly6xBn3nn0WuP9+A4JWreIumZcnUtOjFD+0tmxht1MqISEcLWNZ5CGYz4cfsrfk448NCpo+nQW9/roWvfyWAgV41jrdCLV2bXaN+WNIpBh3G6ZP5zQww4cbFDRzJlepfjKz5Jne4bnn2N+eJixSCnd4lBMngK+/ZteYoWqLd+/yUPOxxwyUBwsg7ETMKMW99zVruHPnT4hxt3D3Lt9wrVsbvOHOn+c149a8rD5GkSJAnz4cpREfb9koOWY8yjvvsDfkgw8MCvrxR54dHzFCi15+T0gITxonJKTZ3L07e1L9LVOkGHcLP/3EXgnDIVFz53KcsY+5ZGwZMoTn0FILBhcrxlESYtxNZ/t2frC+9hpno80yRJyEJjjYJ0JtswXBwXazoDZowNMV/ragSYw77i1aqlkTaNvWoKCZMzlevGZNbfrpJjSUX1On2syhShoC0yEC3niDPXZvvmlQ2O+/8+/1+uv+G5uum3Q5ZqwoxTHvv//Oi3T9BTHuANatA7ZtY1+7oZC0tWt52GcoP7BnGDIE2L/fJr43JITjQAOpPLyHWbkSWL0aGDNGQ5qBzz7jJfV9+mjRLSCoXt1hFtTu3dk1u3y5F/QyCTHu4F57sWKcCtQQM2bwXautBL159O7N/vfUsMiQEK7IZLfgqmAUa5qBqlWBwYMNCtu1i7uZw4b5R7UkT5ErF4+o7aTaaNaM49z9yTUT8Mb9+HGuKjZ4MC/SyzJXrnDl3WeeMSjIM+TPz3O+ERGc/kYiZsxl/nw+tR9+qGGe/bPPOG2AocUYAYoD92OOHEDXrryA0bpoN7sT8MZ98mSOXHj5ZYOC5s/nnm82cMlYeeklTlw5eza4R5Mjhxh3E7h9myNkGjUCevY0KOz0aa6MPWAAD70E9wgO5nOYGip2j+7d2bCvXOkFvUwgoI17fDwnw3vqKc7vlWWI2CXTsCFQv742/cymZk3Oevntt0By7nzsk5TskNqZPBmIi+PgFsNzn5Mn8/VmqIJMAGMdoe7bl2FXy5bsnvUX10xAG/fZszl3kuHwx61bucebjXrtVoYM4UU1K1dCImZM4OJFdsV07MjGwxDx8fwk7tnTp9JaZCsyWdORMyevO4yK4kG4GRBxeT9PpBkOWOOenMydoPBw7nAbYuZMdmJnw8iFLl04K+HUqWDjfuwYcPOmt9XyG8aP5w6E4TQDAF9n16/LoiUjVKzI8xUORqjdu3M45OrV5hw+KoqLsqxYYY58WwLWuC9dyj1Ww732Gzc4GfdTT3Hu0GxG7tzsvl2+HDh5fyPuWuzf7221/IK//+Ysyv36AXXqGBSWmMhZHx99VENvJIBxkgX18cf5NjbDNZOUxPnja9TwzBrHgDXukyZxHqHOnZ23zZQff2QD78MrUp0xaBBf89N3NeEN4nfXwujRPNQ3nGYA4OssLk567Tqw5pixkwU1Tx52oS1dqn/Jx5w5vDj24485KtNsAtK4b90KrF/PYcKWoixZZ8YMTi3XrJkW3bxBhQqcenZWZFHczXuf+N01EBvLA7rXX9dQ/4KIwx9r15ZUAzoICeEsYefP293drRvv1lnA4+ZNXrzWvLnn8gkGpHGfNImHXv36GRS0Zw+X0Bk4MNsvAR8yBDh/XmFpmaFi3A1im2bgjTc0CIyJ4YVLI0YYXEItAHCaKK9dO86cqtM1M3EiFwT59FPPmYqAu1Li4jhJWP/+XKPAEDNnstP62We16OZN2rThAIypt54T426QX38F/vgDeO89TdMwEybw8smnn9YgTHCUY8ZKgQJA+/ac4z0lxfjhzp9no96tG/Dww8bluUrAGfevv+YfbNgwg4ISEjitYrdu3EXL5gQF8SrdP/6phQPniwIXLnhbpWxJcjJPmlWrxnMZhtm9m4u/SKoBfZQsydV4MunEdOsGnDvHA3OjjB3LC9k++si4LHcIKON+4wYX5OjaVUOY8JIlnHIgG0+kpqdfPyBXzhRMw0syqZpFvv+eT91HH2lK5//559yVlFQDerFTuMOWjh150tOoa+bwYbY5gwdzxSdP4pJxV0q1U0odUkodVUqNdNCml1Jqv1Jqn1LqB71qGufOHY5hvXpVkx90xgwOtzFUANO3uP9+oEenO5iL53Ez9oC31cl2XL7MMcxNmvC1Zpi4OOCHH7gDUbSoBoFCKvXq8ajo9Gm7uwsX5sI9ERHGSgu//TaQNy9Ppnoap8ZdKRUEYAqA9gBqA+ijlKqdrk11AKMANCeiOgCMFqrTSmIih6GvWsXpBpo0MSjwyBF2qvbv73cTXEOG50U8iuDHKN9PfuYIa0EMT9b7Tkria+zCBeCrrzRNmk2ezD5Ew3UfhQy8/PI9X6SDC6VbN14Ls2NH1g6xcSM/HN54gxcKehwiyvQFoBmAlTZ/jwIwKl2bTwEMcCbL9tWwYUPyBElJRL17EwFEX3+tSehbbxEFBRGdOaNJoO+QkkJUJ/9xCi2wz9uquM3+/UTdu/NvDRB99JHnjv3qq3zM2bM1CYyPJ7rvPqKnntIkUMjAF1/wj/bdd3Z3X7jAt/no0e6LTkkhat6cqFQpouvXDeqZDgCx5IKNdcW49wAw0+bvvgC+TtdmqcXArwewCUA7Z3I9YdyTk4n69eP/8pNPNAm9e5fogQeIOnfWJND3+Lrl/wgg2ro52duquMTx40TPP0+UIwdRoUJE779/74E+b14WBF675lbzWbP4WMOHZ+FYjvj8cxa6datGoUIakpOJwsKIihRx2FF77DGimjXdFx0ZyT/ft98a1NEOnjbuvwCIBJALQGUApwEUsSNrEIBYALEVKlTQ/1/bkJJC9H//x//hu+9qFLxkCQuNitIo1LeI/3IOFcB16tfTPSPnac6eJXr5ZaJcuYjy5iUaMYJ7W0RECQlEjzzC+6KjXRSYmMgXTVCQy19at46P0bo1f10Ld+8SlS/P/4BgLocP88XTqRMbjXRMmcK3+z43BrKJiUQ1avBDQds1YYNO4+6KW2YagBdt/o4B0CgzuVnuuZ89SzR9ut0fwkpKCtHIkfzf/ec/mTZ1nw4diMqWNedX8xU2bqSB+Jby5U6ky5e9rUxGLl1iz1i+fEQ5cxK99BJRXFzGdleuENWpw96NXbtcENqqFV80BQoQPfQQ9+wy4eRJovvvJ6pWjfSep/nzWY9fftEoVHDIZ5/x+Z4/P8OuM2d413//67q4adP4Oz//rFFHG3Qa95wAjlt65LkB7AJQJ12bdgDmWj6XsPTci2cmN8vGfcwYVrtTJ6J//7XbZNw4bvLSS5oN+6lTPPZ/5x2NQn2Qa9doO+oTwG5JX+HaNb7J7ruPSCmiZ58lOno08++cOkVUpgw/j0+fdtBo3z6iqlWJcucmmjOHfTkA0cKFDuXevMn2/7772NevjZQUovr1iWrVcvpwETSRlETUtClRsWJE585l2P3ww/yTuML16+y1DQvTbHts0GbcWRY6ADgM4BiA0ZZtYwF0tnxWACYC2A9gD4DezmRm2bgnJ7PFyZ2bz+Kvv6bZPWkS/1d9+5pwb3zwAVuVv//WLNgHqVSJmhQ/TDVrmneRusrt2/y7lizJv22XLkR79rj+/V272BcfHEx09Wq6nb/8wjsfeIBo/XrelpxMVLcuUZUqRHfuZJCXksLznEoRLV+e9f/LLtHR/E/OnKlZsJApBw4Q5clD1LVrhgveOv1x7JhzMe+/z203bjRJT9Js3M14GZ5Q3bWLx9wAhyrcvk3ffst/9uhhgtdkyxbuArZurVmwj9KpE31XdhQBbvisNZOYSDRjBlG5cvy7tm5NtHlz1mRFR7ML59FHLfY6JYVn2ZUiatCAu/i2rFhBjkKsxo8nvZP0trRrxw+ahAQThAuZ8skn/MMuWpRm8/HjvPnTTzP/+rlz7NHr0cNEHSkQjDsR0a1bRMOGEQE0r9xIUiqFOnSw29nKOocPE/XsyaeqRAmeQQsE3n6bbgcVoNKlU6hFC8/33mNiiKpX59PetCnR6tXGZX7/Pct7pncSJT/Tl//o1Yt9LOlJSSFq2ZKd6jaxbEuXWmQ8Y8I52b2bhY8fr1mw4BKJiUSNGvF9ns7l26ABX4eZMWQIdyAOHzZRRwoU424hYvQ2CkIiPaZW063Ppui5686dIxo6lH+tAgXY1x8fb1xuduGHH4gA+mpknMd779eu8f1VvTrRsmV6jej4t+IJIBqJD3lyJjPhmzbxLfLBB0TErqCCBYlCQ7lfoZ2+fYny5+fJXcE77N3LLt9evdJsto7WHM3bHDzIQVavvGK+igFj3Fes4FC0hxvdoettLStY2rWzOzHiEvHxbMgLFGDDPnRo1mVlZ/bsIQLo9uwfqFw5ombNPNd7f+89/hm3bNEseMsWSildhgbnnEkA0TffuPCdbt2IChakiwf+pSpVeFGKvcgcw/z+O//TI0aYIFxwC6slX7w4ddPBg7xp8mT7X+nalR/858+br15AGPc1azhEtUEDy0RZSgoHpubNy7Nv7sSi37nDv5x11q5XL/PHV77M3bv81Bw5MjW0K93ctSmcP883SffumgXPn88TZpUqUeL23dSxIwc+OQ1XO3CA7qrc9Gi5Q5QnD3fmtXPpEofz1Kxp30UkeJa7d9mo3H//vYUTRFS7tv2lB+vWkdvhkkbwe+O+YQN3ruvUSXP+mX37iOrV439v6NDMb5jkZHZBVK7M7R991IQuYzYlJIToiSfozh2iSpXYHWl2733YMB7eHjyoSWBSEgfFA+xDt1wsN27w/5Mvn3OD/UrtGAKI5n5mP/TWML178ygxNtYc+YL77NrFnZunn07d9O673CGwdcenpPCotnRpvqY8gV8b9+3biQoX5sUjZ886aJSQQPT66/wv1qpFtGNHxjarVnGwMsAPg99+837cny/x9NNElpXE1iX2y5aZd7i//+b7aeBATQLj44k6dmTFBw/OMNN+/jxHO5YoQXTkiH0R06fz118PmsSzqLpZsIAPMG6cftmCMT74gH+bpUuJiGjnTv5z+vR7TawL1mfM8Jxafmvc9+3jm7FCBV4h6JRVq/ixmjs3B6wmJ3MPyboasVIlHrLLgpGMfPghn6OrV+nuXV7nU7++ec+/vn3Zo6bFp33kCD/Ug4LYVeeAw4eJihfn/y39mri1a/lh064dUdKbozhs0l4nIaucPMm9lIcf9u8Vz9mVu3e501eqFNGlS5SSwp2Btm3v7X7wQXbXePLn81vjPnky22pHPS27XLjAK18A/jUAvqO/+ELiiTMjKorPlWVxjzWUMCJC/6F272bb+eabGoTFxhIVLcorDmNinDbfsIEfKo0b3/PgnTjB0y8PPshpDOjKFZbZrp0GBYk7E48+yhMMrqyOEbzDjh3sMnvuOSIieuMN/vPKFZ6QN3s0aw+/Ne5EWczjkZLCY6dKlTh9QIalikIGzp5lJ+OoUUTE7usaNXilp+6BTseOnJxPSxRgz5788HaWm8CGyEh+uHTuzN6cevW4U53G9z9hAt8yOoLurcseZSWq7/Puu2TN9WONjv3mG55v9cYaEL827oIH6dqVe8CWLu3ChWRvEZ8h/vqLZWrJv37rFs+0Dx7s9le//pr1KF2an2krVqRrcPs2L5dt3NjYHb17N7sJu3SROZ7swJ073KMpU4aSL12hsmU58ArI+oppI4hxF/Tw559km5g6OZkjlGrW5J68UaxFDUqX1hQFaE2kvWpVlr7+5pv89QkTHDSYPZvSx0C7RUICRyHdf7/DxHeCD7J1K8/f9OuXmko83TonjyHGXdBDSgrH/NaqldrLXLyYr5wsFcJIh9WtP22acVlExKkiixXj2a4skJLCk6wOO9RJSTyD9uCDWZtFe+MNknS+2ZRRo4gA2vnNegoJccvrpxUx7oI+rDOpv/1GRNx7r1ePQ1GNRAkkJfFot3r1LNvitCQkcA7eF1/UICwTfv45zWjGZf74gx37WXAZCT7A7dvcySlXzqupSFw17v5V3Vkwh169gFKlgC++AMA1wT/4ADh6FJg3L+tiFywA9u4Fxo0DcuXSoGdMDHDtGtC9uwZhmdCpE9C8OfD++8CtW659Jz4eeO45oGpV4PPPTVVPMIm8eYE5c4CzZ7nqtY8jxl1wTp48wNChwG+/AQcOAAA6dwYaNgTGjgUSE90XeecOMGYM0KAB0KOHJj0jIoD77gMef1yTQAcoBXz8MXDuHPDll6595//+DzhzBpg/HyhQwFz9BPNo0gR4/XVg+nRgyxZva5MpYtwF13jpJTbykycDYPs2dixw4gR3Ztxl2jTg5Em2kTl0XIVJScDPP3OvOk8eDQKdEBbGx/r4Y+DSpczb/vQTD3HeeYeNg5C9efddoGhR4KOPvK1J5rjiuzHjJT73bEj//pyM5eJFIuJJx6ZNuZazO2vBrCl9W7XSqJu1gtGSJRqFOmHPHvahv/664zZxcbz4qXFjTRMLgk9gLffpTuVsTUB87oJ2Xn0VuH0bmDEDwL3e++nTwMyZrov5/HPg4kXNHZ/Fi4H8+YG2bTUKdUJwMPD888BXXwGnTmXcn5ICvPgi+6DmzdM0sSD4BMOG8fX2ySfe1sQxrjwBzHhJzz2b0qoVp6e19EJTUojCw7kCoSsFLKwpfbWWIktK4tJ0Ztc3s8fJk7yi5YUXMu6bPJl7d1Onel4vwXyGD+dcBCdOePSwkJ67YAqvvcYTgxERAO713s+eBb791vnXx4/nzv+4cRp12rABOH9e48ysG1SoALzyCjB3Lof+WNm/H3jzTaBDB2DwYM/rJZjPf/7DN4CPRj8pfhB4ntDQUIqNjfXKsQUDpKQANWvyhNKmTXxxA2jVim3b8eOOg0FOnAAefBB44QUONtDG8OE8Q3vhAlCokEbBLnLpElClCtCyJbBsGXD3LtCsGbtq9uzhMFLBP+nXD1i0iKMDSpb0yCGVUtuIKNRZO+m5C+6RIwf73rdsYeNuYexY4N9/gW++cfzVMWOAoCDgvfc06pOSwqOItm29Y9gBoHhxYORIICoKWLeOFwFs385zE2LY/Zu33gISElwPifUkrvhuzHiJzz0bc/06p3BMl1yjbVtOxnjtWsavaE3pa4s1Td/cuZoFu8nNm5wgp3p1zjrWr5939RE8R/funELUQ6tWIT53wTQKFgQGDuQes02UyNix7KH46quMX3n7baBwYe7oaCUigqNQOnXSLNhN8ufnFatHjgAVK6au5hUCgJEjeQXytGne1iQNYtyFrPHKK/z+9depmxo3Bjp2BD77jK91K+vWAb/8woa9WDGNOhCxcW/ViucAvE2/fnyjL1niPReR4HlCQ3lV9KRJ7KLxEVwy7kqpdkqpQ0qpo0qpkXb2v6CUuqCU2ml5DdCvquBTVKgAdOvGfuUbN1I3f/ABcOXKvY4rEdu70qU5NFgrO3fyDK7ZuWRcJWdODt6vX9/bmgieZtQo4J9/OGrKR3Bq3JVSQQCmAGgPoDaAPkqp2naa/khE9S0vN5a0CNmW4cOBq1eB779P3dSgAdClCzBxIhv55cuB9et5EjV/fs3Hj4jgCd4nn9QsWBDc5NFHeej66aecCsMHcKXn3hjAUSI6TkR3ASwCIHeTwOF+jRtzNz0lJXXzBx9wcsYJE7hDU706eyy0ExEBPPKIx0LQBMEhSvHFfvw45xLyAVwx7mUBnLb5O86yLT3dlVK7lVKLlVLltWgn+DZKce/9yBHg119TN9etC/TsyTm1tKb0tWX/fuDgQd9xyQhC585ArVp84Xtp/ZAtuiZUowBUIqK6AH4HYNfxpJQapJSKVUrFXrhwQdOhBa/SowdQtmyG6JD33+f3hg1NWji6eDE/XLp2NUG4IGSBHDk4amD37jSdHa+p40KbMwBse+LlLNtSIaJLRHTH8udMAA3tCSKi6UQUSkShJWUo7R/kysWRM9HRaZbf167NXpMFCzSl9E1PRATw8MM8UysIvsLTT3OwgQ+kA3blttsKoLpSqrJSKjeA3gCW2TZQStneYZ0BHNCnouDzDBwI5MuXoffetStQo4YJxzt6lHtH3sglIwiZkSsXMGIEx/+uW+dVVZwadyJKAvAKgJVgo/0/ItqnlBqrlOpsaTZMKbVPKbULwDAAL5ilsOCDFC/OJeTmz+f8LmZjSVqGbt3MP5YguEv//kCJEl7vvUviMEEPBw6wL+a//+WKQ2bSuDG/+3iZMyGAGTeOKzbt2sURBhqRxGGCZ6lVC2jXDpgyhbMimsXJk8DWrRIlI/g2L7/MaTo+/thrKohxF/QxfDiv0vvxR/OOsWQJv4txF3yZokWBIUP4Xjh2zCsqiHEX9NGmDffgJ00yL843IgKoVw+oVs0c+YKgi+HDOSXFhAleObwYd0EfSnGu9x07zIkUOHuWqy5Jr13IDpQpw5Vp5swBzp3z+OHFuAt66duXUz9OmqRfdmQkjwjEuAvZhTff5FwzXkgBLcZd0Ev+/FwzdOlSzrOhk4gILvFX217eOkHwQapWBXr1AqZO5SR7HkSMu6CfoUO5np5NrnfDXLgA/PmnLFwSsh9vvQVcv86RZB5EjLugn3LlOHPYzJmcHlIHP//MmSfFJSNkN+rXB9q3Z9fMrVseO6wYd8Echg/n3sq4cXoiZxYvBqpU4UgZQchujBoFXLwIzJrlsUOKcRfMoXFjnlydMAF46ik29FnlyhUgJoZ77Urp01EQPEV4ONC8OdegTEz0yCHFuAvmMXcu8MknPBHapAlw6FDW5ERFccSB+NuF7MzIkVxQfuFCjxxOjLtgHkpxKNiqVTwh2qgRhzO6S0QEUL48f18QsitPPAGEhHBKApvKZWYhxl0wn1atgG3bOIyxWzfg7beB5GTXvnv9OrByJX9PXDJCdkYp7r0fOAAsW+a8vUHEuAueoUIFYO1azv3+0UccPXDxovPvLV8O3LkjUTKCf9CrF7+KFTP9UGLcBc+RNy8wfTqHSK5dyzX4tm3L/DsREUCpUlx1SRCyOzlzcjKxFi1MP5QYd8Hz9O9/L/dM8+aOw8Nu3QJWrOCSTkFBntNPEPwAMe6CdwgN5V57eDgwYAAwaBC7X2z57Tc28OKSEQS3EeMueI8SJdiAjxoFzJjBhv706Xv7IyK4hF/Llt7TURCyKWLcBe8SFAR8+CEX4Th4EGjQAFi9mnvxv/wCdOnCfkpBENxCjLvgG3TtyuXz7r8faN2aV7deuyYuGUHIImLcBd+hRg1g82Y26D/9BBQuzDHygiC4jYx3Bd+iYEEOFWvdmnPD587tbY0EIVsixl3wPZTixU6CIGQZccsIgiD4IWLcBUEQ/BAx7oIgCH6IS8ZdKdVOKXVIKXVUKTUyk9LXLBMAAAZDSURBVHbdlVKklArVp6IgCILgLk6Nu1IqCMAUAO0B1AbQRymVofy8UqoQgFcBbNatpCAIguAervTcGwM4SkTHiegugEUAnrTT7r8APgGQoFE/QRAEIQu4YtzLArBJ+IE4y7ZUlFINAJQnouWZCVJKDVJKxSqlYi9cuOC2soIgCIJrGJ5QVUrlADARwOvO2hLRdCIKJaLQkiVLGj20IAiC4ABXFjGdAVDe5u9ylm1WCgEIBvCH4jJopQAsU0p1JqJYR0K3bdt2USl10n2VAQAlALhQxsfjiF7uIXq5j6/qJnq5hxG9KrrSSBFR5g2UygngMIBWYKO+FcDTRLTPQfs/AIzIzLAbRSkVS0Q+F5EjermH6OU+vqqb6OUentDLqVuGiJIAvAJgJYADAP5HRPuUUmOVUp3NVE4QBEHIGi7lliGiFQBWpNs2xkHbR4yrJQiCIBghu65Qne5tBRwgermH6OU+vqqb6OUepuvl1OcuCIIgZD+ya89dEARByASfNu7OctoopfIopX607N+slKrkAZ3KK6XWKKX2K6X2KaVetdPmEaVUvFJqp+Vld37CBN1OKKX2WI6ZIVpJMZMt52u3ZfGZ2TrVsDkPO5VS15RSw9O18dj5UkrNVkr9q5Taa7OtmFLqd6XUEct7UQfffd7S5ohS6nmTdZqglDpo+Z0ilVJFHHw309/cJN3eV0qdsfm9Ojj4rks5qTTq9aONTieUUjsdfNeUc+bINnjt+iIin3wBCAJwDEAVALkB7AJQO12boQCmWT73BvCjB/QqDaCB5XMhcJhoer0eAfCLF87ZCQAlMtnfAcCvABSApgA2e+E3/QdARW+dLwAtADQAsNdm26cARlo+jwTwiZ3vFQNw3PJe1PK5qIk6tQGQ0/L5E3s6ufKbm6Tb++BwZ2e/dab3r2690u3/HMAYT54zR7bBW9eXL/fcXclp8ySAuZbPiwG0UpaVVGZBROeIaLvl83VweGjZzL/lMzwJ4HtiNgEoopQq7cHjtwJwjIiyunjNMES0FsDldJttr6O5ALrY+WpbAL8T0WUiugLgdwDtzNKJiFYRhyEDwCbw4kGP4+B8uYKrOam062WxAb0ALNR1PBd1cmQbvHJ9+bJxd5rTxraN5UaIB1DcI9oBsLiBHoL9TJjNlFK7lFK/KqXqeEglArBKKbVNKTXIzn5XzqmZ9IbjG84b58vKA0R0zvL5HwAP2GnjzXPXDzzisoez39wsXrG4jGY7cDN483yFAzhPREcc7Df9nKWzDV65vnzZuPs0SqmCACIADCeia+l2bwe7HuoB+ArAUg+pFUZEDcDpmV9WSrXw0HGdopTKDaAzgJ/s7PbW+coA8RjZZ0LIlFKjASQBWOCgiTd+86kAqgKoD+Ac2AXiS/RB5r12U89ZZrbBk9eXLxt3Zzlt0rRRnCahMIBLZiumlMoF/vEWENGS9PuJ6BoR3bB8XgEgl1KqhNl6EdEZy/u/ACLBQ2NbXDmnZtEewHYiOp9+h7fOlw3nre4py/u/dtp4/NwppV4A0BHAMxajkAEXfnPtENF5IkomohQAMxwc0yvXmsUOdAPwo6M2Zp4zB7bBK9eXLxv3rQCqK6UqW3p9vQEsS9dmGQDrrHIPAKsd3QS6sPjzZgE4QEQTHbQpZfX9K6Uag8+zqQ8dpVQBxQVToJQqAJ6Q25uu2TIAzymmKYB4m+Gi2TjsTXnjfKXD9jp6HsDPdtqsBNBGKVXU4oZoY9lmCkqpdgDeBNCZiG45aOPKb26GbrbzNF0dHNOV+9cMHgdwkIji7O0085xlYhu8c33pnjHW+QJHdxwGz7qPtmwbC77gASAveJh/FMAWAFU8oFMYeFi1G8BOy6sDgJcAvGRp8wqAfeAIgU0AHvaAXlUsx9tlObb1fNnqpcBVtY4B2AMg1EO/YwGwsS5ss80r5wv8gDkHIBHs1+wPnqeJAXAEQDSAYpa2oQBm2ny3n+VaOwrgRZN1Ogr2wVqvMWtUWBkAKzL7zT1wvuZZrp/dYMNVOr1ulr8z3L9m6mXZ/p31urJp65Fzlolt8Mr1JStUBUEQ/BBfdssIgiAIWUSMuyAIgh8ixl0QBMEPEeMuCILgh4hxFwRB8EPEuAuCIPghYtwFQRD8EDHugiAIfsj/A3BUIJ5+rnwoAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc335403c50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 测试\n",
    "\n",
    "px, ry = create_dataset(real, input_size)\n",
    "px = px.reshape(-1, 3)\n",
    "ry = ry.reshape(-1, 1)\n",
    "print(px.shape, ry.shape)\n",
    "px = torch.from_numpy(px)\n",
    "px = cudAvl(Variable(px))\n",
    "py = np.array(fc(px).data)\n",
    "\n",
    "# 画出实际结果和预测的结果\n",
    "plt.plot(py, 'r', label='prediction')\n",
    "plt.plot(ry, 'b', label='real')\n",
    "plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
